
/**
 * 左侧菜单的点击处理, 加载新的页面
 */
$(function() {

	var content = $(document.body).find(".lyt-contents");
	var sidebar = $(document.body).find(".lyt-sidebar .sidebar-menu");

	// 左侧菜单的点击事件
	sidebar.on("click", "a[href]", function(e) {
		var me = $(this);

		var hash = me.attr("href");
		if (!hash || !hash.startsWith('#')) { return; }
		var options = me.zoptions();
		// open=true表示打开新窗口
		if (options.open == false) { return; }
		me.closest(".sidebar-menu").find("li.active").removeClass("active");
		me.parent().addClass("active").parents("li.header").addClass("active");
		var title = options.title || me.text();
		var o = $.extend({ hash:hash, title:title, menu:me }, options);
		hash && content.xui("load", o);
		if (o.homepage) { e.preventDefault(); }
	})
	.on("open.sidebar", function(e, hash) {
		if (!hash) { return; }
		$(this).find("a").each(function() {
			if ($(this).attr("href") == hash) {
				$(this).click();
				return false;
			}
		});
	})
	.on("selected.sidebar", function(e, item) {
		var menu = $(this);
		if (!item.parent().hasClass("active")) {
			menu.find("li.active").removeClass("active");
			item.parent().addClass("active");
		}
	})
	.on("click", "li.header > a", function(e) { // 打开/关闭子菜单
		var me = $(this);
		var hash = me.attr("href");
		if (hash && hash != "#") { return; }
		
		var li = me.parent();
		if (li.is(".active")) {
			li.removeClass("active");
		} else {
			li.siblings("li.header.active").removeClass("active")
				.parents("li.header.active").removeClass("active");
			li.addClass("active").parents("li.header").addClass("active");
		}
		return false;
	});

	// 根据location.hash初始化左侧菜单
	sidebar.trigger("open", window.location.hash);
});




(function($) {
	var formatEnumValue = function(enums, value, node, warnning) {
		if (!value) { return value; }
		var text = enums[value];
		if (warnning === undefined) {
			return text;
		}
		if (node.tagName && node.tagName.toUpperCase() == "INPUT") {
			var input = $(node);
			if (input.is(".x-textbox")) {
				input = input.textbox("textbox");
			}
			if (warnning) {
				input.addClass("warn");
			} else {
				input.removeClass("warn");
			}
			return text;
		} else {
			return warnning ? wrapWarnning(text) : text;
		}
	};
	var wrapWarnning = function(value) {
		return '<span class="warn">' + value + '</span>';
	};
	// 根据状态显示右键菜单项
	var doShowMenuItem = function(menu, state) {
		menu.children().each(function() {
			var me = $(this);
			if (me.is(".ALL") || me.is(".menu-sep")) {
				return true;
			}
			if (state && me.hasClass(state)) {
				menu.menu("showItem", this);
			} else {
				menu.menu("hideItem", this);
			}
		});
	};
	// 枚举转换为map
	var enumsToMap = function(enums) {
		var map = {};
		$.each(enums, function() {
			map[this.key] = this.value;
		});
		return map;
	};
	// Utils.map("aaa bbb ccc ddd")
	// Utils.map("aaa bbb", "ccc ddd")
	// --> "({aaa:aaa,bbb:bbb,ccc:ccc})"
	var map = function(keys) {
		var list = [];
			$.each(arguments, function(i, keys) {
			if (typeof(keys) == "string") {
				keys = $.trim(keys).split(/[ ,]+/g);
			}
			$.each(keys, function(i, key) {
				if (key && (typeof(key) == "string")) {
					list.push(key + ":" + key);
				}
			});
		});
		return "({" + list.join(",") + "})";
	};
	var dateClearTime = function(value) {
		return value && value.substring(0, 10);
	};
	// 克隆
	var clone = function(object) {
		if ($.isArray(object)) {
			var array = [];
			$.each(object, function() {
				array.push(clone(this));
			});
			return array;
		} else {
			return $.extend(true, {}, object);
		}
	};
	var ueditorId = 0;
	var ueditor = {
		create: function(space, selector, params) {
			var editor = space.find(selector).eq(0);
			var id = "ueditor-" + (ueditorId++);
			editor.attr("id", id);
			return UE.getEditor(id, params);
		}
	};

	if (!window.Utils) { window.Utils = {}; }
	$.extend(window.Utils, {
		clone:clone, map:map,
		doShowMenuItem:doShowMenuItem,
		wrapWarnning:wrapWarnning, formatEnumValue:formatEnumValue,
		enumsToMap:enumsToMap,
		ueditor:ueditor, dateClearTime:dateClearTime
	});
	
	$.fn.xui.defaults.getBaseUrl = Utils.getBaseUrl;
})(jQuery);
